Computing systems are becoming increasingly interconnected through network environments. Such network environments may be centralized or decentralized. A decentralized computing environment may be defined by a number of computing systems interconnected to communicate with one another, wherein each computing system can perform both client and server functions. A peer-to-peer (P2P) network represents an example of a decentralized computing environment in which each computing system within the P2P network is defined as a peer of every other computing system within the network. For discussion purposes, each peer computing system within the P2P network is referred to as a node. Additionally, each node within the P2P network may be configured to execute software having substantially equivalent functionality. Therefore, each node may act as both a provider and a user of data and services across the P2P network. Peer to peer networks are distributed data networks without any centralized hierarchy or organization. Peer to peer data networks provide a robust and flexible means of communicating information between large numbers of computers or other information devices, referred to in general as nodes.
A P2P network relies primarily on the computing power and bandwidth of the participants in the network rather than concentrating it in a relatively low number of servers. P2P networks are typically used for connecting nodes via largely ad hoc connections. Such networks are useful for many purposes. P2P networks may be used, e.g., for sharing content files containing audio, video, data or anything in digital format is very common, and real-time data, such as telephony traffic, may also be transmitted using P2P technology.
P2P applications often involve a significant amount of communication between nodes over different communication channels. By way of example, such channels may include an audio channel, a video channel, and a file transfer channel. A given application, e.g., audio-video (A/V) chat may communicate using all three channels. Typically, an application has a limited amount of network bandwidth available for communication. The application distributes the available bandwidth among the communication channels. However, the amount of available network bandwidth is generally not known.
Prior art network implementations involving multiple communication channels typically adopt an “all or nothing” approach that can lead to bandwidth starvation. For example, consider a very low bandwidth situation where a user is attempting to engage in A/V chat involving transmission of captured audio and video frames. If the user does not have enough bandwidth available to transmit all of the captured audio and video frames, prior art techniques typically give complete priority to the audio frames and do not transmit any video frames. This may reduce quality of service for the A/V chat.
It is within this context that embodiments of the present invention arise.